package databases

import (
	"fmt"
	config "golang-blog/conf"
	"log"
	"os"
	"path"
	"path/filepath"
	"time"

	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
	"gorm.io/gorm/schema"
)

// 使用mysql连接操作sqlite3

var (
	sqliteDB *gorm.DB
)

func initSqliteDB() {
	var dbname = config.Viper().GetString("db.sqlite.dbname")

	// 设置db文件的存储位置
	dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
	if err != nil {
		panic(err)
	}
	config := gorm.Config{
		NamingStrategy: &schema.NamingStrategy{
			SingularTable: true,
		},
	}
	dsn := fmt.Sprintf("%s.db", dbname)
	db, err := gorm.Open(sqlite.Open(path.Join(dir, dsn)), &config)
	if err != nil {
		panic(err)
	}

	sqliteDB = db

	sqlDB, err := db.DB()
	if err != nil {
		log.Fatal("setupmusql connect database server failed.")
		return
	}
	// SetMaxIdleConns 设置空闲连接池中连接的最大数量
	sqlDB.SetMaxIdleConns(10)
	// SetMaxOpenConns 设置打开数据库连接的最大数量。
	sqlDB.SetMaxOpenConns(100)
	// SetConnMaxLifetime 设置了连接可复用的最大时间。
	sqlDB.SetConnMaxLifetime(5 * time.Minute)

}

func GetSqliteDB() *gorm.DB {
	if sqliteDB == nil {
		initSqliteDB()
		return sqliteDB
	}
	return sqliteDB
}
